// index.js
const Ota = require('../../utils/ota.js')
const app = getApp()
import Bluetooth from '../../utils/bluetooth'
Page({

    /**
     * 页面的初始数据
     */
    data: {
        devices: [],    // 搜索到的设备列表数组
        upgrade: true,   // 搜索按钮与进度条切换
        percent: 0,    // 升级固件进度条进度
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        
    },
    // 监听页面显示时触发
    onShow: function() {
        
    },
    // 点击搜索附近蓝牙设备
    searchDevice() {
        let _loadingCount = 1, title = '正在搜索中...'
        wx.showLoading({
          title,
        })
        Bluetooth.foundBluetoothDevices((res) => {
            let devices = this._handleFounDevices(res)
            if(devices.length > 0) {
                this.setData({
                    devices
                })
            }
            if(_loadingCount === 1) {
                _loadingCount = 0
                wx.hideLoading()
            }
        })
    },
    // 处理搜索到的蓝牙设备
    _handleFounDevices(res) {
        const devices = this.data.devices
        res.forEach((item) => {
            const idx = Bluetooth.inArray(devices, 'deviceId', item.deviceId)
            if(item.name.includes('TJL-')) {
                item.name = '矫姿' + item.name
                if(idx > -1) {
                    devices[idx] = item
                } else {
                    devices.push(item)
                }
            }
        })
        return devices
    },
    // 跳转链接
    connect(e) {
        let { currentTarget: { dataset: { deviceId, type } } } = e, url
        Bluetooth.stopBluetoothDevicesDiscovery().then((res) => {
            if(res.errno === 0 && type === 'connect') {      // 矫姿设备功能测试页面
                url = '/pages/deviceDebuggingFun/deviceDebuggingFun'
            } else if(res.errno === 0 && type === 'update') {      // 修改名字页面
                url = '/pages/updateBleName/index'
            }
            wx.navigateTo({
              url: url + '?deviceId=' + deviceId,
            })
        }).catch((err) => {
            console.log('关闭蓝牙搜索功能失败', err)
            if(err.errCode === 10000) {
                wx.showToast({
                    icon: 'none',
                    title: '请重新点击搜索进行搜索',
                }).then((res) => {
                    this.setData({
                        devices: []
                    })
                })
            }
        })
    },

    // 维盛平台提供的ota升级方法----固件升级功能
    updateFirmware1(e) {
        let { currentTarget: { dataset: { deviceId } } } = e
        console.log('蓝牙设备ID', deviceId)
        const fs = wx.getFileSystemManager()
        wx.downloadFile({
            url: 'https://tjl-health.oss-cn-shenzhen.aliyuncs.com/2022062909085591lqobms.bin',  // 固件包网络地址--版本V5
            success: (res) => {
                fs.readFile({
                    filePath: res.tempFilePath,
                    success: (res) => {
                        console.log('读取的文件数据', res.data)
                        let loadReturnValue = Ota.load(res.data) // 加载固件,成功返回undefined,失败返回错误提示
                        console.log('加载固件文件返回值', loadReturnValue)
                        if (loadReturnValue !== undefined) {
                            wx.showToast({
                                title: '固件错误',
                            })
                            return
                        } else {
                            console.log('固件加载成功')
                            this.getFirmwareInformation(deviceId)
                        }
                    }
                })
            }
        })
    },
    // 获取固件相关信息
    getFirmwareInformation(deviceId) {

        let frimwareInfo = Ota.getFrimwareInfo()  // 获取固件信息
        let firmwareVer = frimwareInfo.frimVer    // 当前固件版本
        console.log('获取固件信息', frimwareInfo)

        Ota.otaBeaconStart()  // 广播启动
        wx.showLoading({
            title: '请稍等...',
            success: () => {
                this.setData({
                    upgrade: false
                })
            }
        })
        console.warn('准备链接的设备Id', deviceId)
        Ota.deviceConnect({   // 连接设备,前提条件是固件加载成功
            deviceId,
            connected: (res) => {   // 成功
                console.log('设备连接成功获取设备(当前连接设备)版本信息', res)
                let deviceFirmwareVer = res.appVer   // 当前连接设备的固件版本

                if (deviceFirmwareVer < firmwareVer) {    // 设备固件版本过低,需要升级
                    Ota.startUpdate({   // 启动固件更新
                        rebootMode: 0,   // 更新后重启到指定模式(0正常模式;1升级模式;2裂变模式;3强制裂变模式)
                        progress: (res) => {
                            console.log('固件更新情况.已更新的固件大小--固件大小', res.txSize, res.frimSize)
                            if(res.txSize >= res.frimSize) {
                                wx.hideLoading({}).then((res) => {
                                    wx.showToast({
                                        title: '更新成功!',
                                        icon: 'none',
                                        success: () => {
                                            this.setData({
                                                upgrade: true
                                            })
                                        }
                                    })
                                })
                            } else {
                                let percent = ((res.txSize / res.frimSize) * 200 - this.data.percent).toFixed(1)
                                console.log('进度条百分比', percent)
                                this.setData({
                                    percent
                                })
                            }
                        },
                        fail: (err) => {
                            console.log('固件更新失败--失败原因', err)
                            // Ota.deviceConnect({
                            //     deviceId,
                            //     connected: (res) => {
                            //         console.log('固件升级过程中断开之后,重连成功', res)
                            //     }
                            // })
                        }
                    })

                } else {
                    wx.showToast({
                        title: '当前版本已是最新版本',
                        icon: 'none',
                        success: () => {
                            this.setData({
                                upgrade: true
                            })
                        }
                    })
                }

                // Ota.rebootToMode({
                //     mode: 1,
                //     success: (res) => {
                //         console.log('设备切换到指定模式成功', res)
                //     },
                //     fail: (err) => {
                //         console.log('重启设备到指定的模式失败', err)
                //     }
                // })

            },
            fail: (err) => {   // 失败
                console.log('设备连接失败', err)
            },
            disconnected: () => {
                console.log('设备已断开')
            }
        })
        
    },
    
})